/**
 * 通义千问API配置
 */
import { MultimodalInput } from '../interfaces/qwen';

/**
 * 通义千问API配置
 */
export class QwenAPIConfig {
  /**
   * API基础URL
   */
  static readonly BASE_URL = 'https://dashscope.aliyuncs.com/api/v1';
  
  /**
   * 聊天API端点
   */
  static readonly CHAT_ENDPOINT = 'services/aigc/text-generation/generation';
  
  /**
   * 嵌入API端点
   */
  static readonly EMBEDDING_ENDPOINT = 'services/embeddings/text-embedding/text-embedding';
  
  /**
   * 默认聊天参数
   */
  static readonly DEFAULT_CHAT_PARAMS = {
    model: 'qwen2.5-omni',
    stream: true,
    parameters: {
      max_tokens: 1500,
      temperature: 0.7,
      top_p: 0.8,
    }
  };
  
  /**
   * 格式化多模态消息
   * @param input 多模态输入
   * @returns 格式化后的消息
   */
  static formatMultimodalMessage(input: MultimodalInput): any {
    const message = {
      role: 'user',
      content: [] as any[]
    };
    
    // 添加文本
    if (input.text) {
      message.content.push({
        type: 'text',
        text: input.text
      });
    }
    
    // 添加图像
    if (input.images && input.images.length > 0) {
      for (const image of input.images) {
        message.content.push({
          type: 'image',
          image: typeof image === 'string' ? image : `data:image/jpeg;base64,${image}`
        });
      }
    }
    
    // 添加音频
    if (input.audio) {
      message.content.push({
        type: 'audio',
        audio: typeof input.audio === 'string' ? input.audio : `data:audio/wav;base64,${input.audio}`
      });
    }
    
    // 添加视频
    if (input.video) {
      message.content.push({
        type: 'video',
        video: typeof input.video === 'string' ? input.video : `data:video/mp4;base64,${input.video}`
      });
    }
    
    return message;
  }
  
  /**
   * 构建聊天请求体
   * @param messages 消息数组
   * @param options 选项
   * @returns 完整请求体
   */
  static buildChatRequestBody(messages: any[], options: any = {}): any {
    return {
      model: options.model || this.DEFAULT_CHAT_PARAMS.model,
      messages,
      stream: options.stream !== undefined ? options.stream : this.DEFAULT_CHAT_PARAMS.stream,
      parameters: {
        ...this.DEFAULT_CHAT_PARAMS.parameters,
        ...(options.parameters || {})
      }
    };
  }
}